'use client'; // D2 종목 토론 탭 — 통계 헤더 + 글 목록(DefaultListLayout 스타일) + 글쓰기(로그인 게이트). // 목록은 SSR 로 받은 initial 데이터를 렌더하고, 페이징은 링크로 처리(?tab=discussion&page=). import '@/app/styles/community.scss'; import Link from 'next/link'; import { useState } from 'react'; import { useMemberContext } from '@/contexts/memberProvider'; import { formatDate } from '@/lib/utils/client'; import { StockBoardPostsResponse } from '@/types/community'; import StockWriteForm from './StockWriteForm'; interface Props { code: string; stockName?: string|null; page: number; perPage: number; data: StockBoardPostsResponse; } export default function StockDiscussion({ code, stockName, page, perPage, data }: Props) { const { member } = useMemberContext(); const [writing, setWriting] = useState(false); const stats = data.stats; const list = data.list; const startIndex = data.total - (page - 1) * perPage; const totalPages = Math.max(Math.ceil(data.total / perPage), 1); return (
전체 글{stats.posts.toLocaleString()} 댓글{stats.comments.toLocaleString()} {stats.lastPostAt && 최근 작성{formatDate(stats.lastPostAt)}}
총 {data.total.toLocaleString()}건 {member ? ( !writing && ( ) ) : null}
{member && writing && ( setWriting(false)} /> )} {!member && (
로그인 후 토론에 참여할 수 있습니다.
)} {list.length === 0 ? (

등록된 글이 없습니다. 첫 글을 남겨보세요.

) : ( {list.map((row, i) => ( ))}
{stockName ?? code} 토론 글 목록 — 번호·제목·작성자·작성일·조회·좋아요
번호 제목 작성자 작성일 조회 추천
{startIndex - i} {row.hasPrediction && 예측} {row.subject} {row.comments > 0 && [{row.comments}]} {row.name || row.sid || '익명'} {formatDate(row.createdAt)} {row.views.toLocaleString()} {row.likes.toLocaleString()}
)} {data.total > perPage && ( )}
); }